﻿Public Class frmBangKeChungTu
    Private ctrlChungTu As New CChungTuController()
    Private ctrlDanhMuc As New CDanhMucController()
    Private ctrlBangKe As New CBangKeChungTuController()
    Private curDanhMuc As tblDanhMuc = Nothing
    Private curBangKe As tblBangKeChungTu = Nothing

    Private Sub BindAutoCompleteToCode()
        'tạo chức năng auto complete cho Cont No
        Dim source = New AutoCompleteStringCollection()

        Dim CodeList = ctrlDanhMuc.SelectAllCode()
        source.AddRange(CodeList)

        'Textbox MBLNo
        txtCode.AutoCompleteSource = AutoCompleteSource.CustomSource
        txtCode.AutoCompleteCustomSource = source
        txtCode.AutoCompleteMode = AutoCompleteMode.SuggestAppend
    End Sub

    Private Sub frmBangKeChungTu_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        CViewer.BindDonViToComboBox(cboDonVi)
        CViewer.BindLoaiNSToComboBox(cboLoaiChiTieu)
        BindAutoCompleteToCode()
        'LoadBangKe()
        EnableControls(False)
        txtThang.Text = Date.Now.Month
        txtNam.Text = Date.Now.Year
    End Sub
    Private Sub EnableControls(ByVal val As Boolean)
        btHuy.Enabled = val
        btSave.Enabled = val
        gridBangKe.ReadOnly = Not val
        gridBangKe.AllowUserToAddRows = val
        gridBangKe.AllowUserToDeleteRows = val

        btXoa.Enabled = Not val
        btSua.Enabled = Not val

        btXem.Enabled = Not val
        btPrint.Enabled = Not val

        cboDonVi.Enabled = Not val
        cboLoaiChiTieu.Enabled = Not val
        txtCode.Enabled = Not val
        txtThang.Enabled = Not val
        txtNam.Enabled = Not val
    End Sub

    Private Sub btXem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btXem.Click
        'load thong tin chung tu theo don vi, loai chi tieu, ma code, thang, nam
        LoadBangKe()
    End Sub

    Private Sub btXoa_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btXoa.Click
        If (curBangKe IsNot Nothing) Then
            If (MessageBox.Show("Bạn có chắc muốn xoá toàn bộ bảng kê này?", "Xác nhận", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.Yes) Then
                ctrlChungTu.DeleteAllRecordInBangKe(curBangKe.ID_BangKeChungTu)
            End If
        End If
        LoadBangKe()
        EnableControls(False)
    End Sub

    Private Sub btSua_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btSua.Click
        EnableControls(True)
    End Sub

    Private Sub btHuy_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btHuy.Click
        LoadBangKe()
        EnableControls(False)
    End Sub
    Private Sub LoadBangKe()
        If (curDanhMuc Is Nothing) Then
            MessageBox.Show("Chưa chọn danh mục!")
            Exit Sub
        End If
        curBangKe = ctrlBangKe.SelectRecordByCondition(cboDonVi.SelectedValue, curDanhMuc.ID_DanhMuc, cboLoaiChiTieu.SelectedValue, CInt(txtThang.Text), CInt(txtNam.Text))
        Dim source = ctrlChungTu.SelectAllByDieuKien_2(curDanhMuc.ID_DanhMuc, cboDonVi.SelectedValue, cboLoaiChiTieu.SelectedValue, CInt(txtThang.Text), CInt(txtNam.Text), Date.MinValue, Date.MinValue, "", "", Decimal.MinValue, Decimal.MinValue)
        gridBangKe.DataSource = source
        TinhTong()
        If (gridBangKe.Rows.Count = 0) Then
            MessageBox.Show("Chưa có thông tin chứng từ!")
        End If
    End Sub

    Private Sub txtCode_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtCode.Leave
        curDanhMuc = ctrlDanhMuc.SelectRecordByCode(txtCode.Text)
        If (curDanhMuc IsNot Nothing) Then
            lblTenKinhPhi.Text = curDanhMuc.NoiDung
        Else
            lblTenKinhPhi.Text = ""
            txtCode.Text = ""
            MessageBox.Show("Không đọc được thông tin danh mục!")
        End If
    End Sub
    Private Sub TinhTong()
        Dim tongTien As Double = 0
        For Each r As DataGridViewRow In gridBangKe.Rows
            If (r.IsNewRow = False) Then
                tongTien += CDbl(r.Cells("SoTien").FormattedValue.ToString)
            End If
        Next
        Dim soDong As Integer = gridBangKe.Rows.Count
        If (gridBangKe.AllowUserToAddRows = True) Then
            soDong = soDong - 1
        End If
        lblTongChungTu.Text = soDong.ToString
        lblTongTien.Text = tongTien.ToString("#,##0.##")
    End Sub
    Private Sub btSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btSave.Click
        'đọc từng dòng, sau đó thêm vào
        'trước tiên là kiểm tra xem bảng kê chứng từ này có chưa
        If (curBangKe Is Nothing) Then
            curBangKe = New tblBangKeChungTu
            With curBangKe
                .ID_DanhMuc = curDanhMuc.ID_DanhMuc
                .Id_DonVi = cboDonVi.SelectedValue
                .ID_MaLoaiNganSach = cboLoaiChiTieu.SelectedValue
                .ThangQuyetToan = CInt(txtThang.Text)
                .NamQuyetToan = CInt(txtNam.Text)
            End With
            ctrlBangKe.InsertRecord(curBangKe)
        Else
            ctrlChungTu.DeleteAllRecordInBangKe(curBangKe.ID_BangKeChungTu)
        End If
        For Each r As DataGridViewRow In gridBangKe.Rows
            If (r.IsNewRow = False) Then
                Dim ct As New tblChungTu
                With ct
                    .ID_BangKeChungTu = curBangKe.ID_BangKeChungTu
                    If (String.IsNullOrEmpty(r.Cells("SoChungTu").FormattedValue.ToString()) = False) Then
                        .SoChungTu = r.Cells("SoChungTu").Value.ToString()
                    End If
                    If (String.IsNullOrEmpty(r.Cells("NgayChungTu").FormattedValue.ToString()) = False) Then
                        .NgayChungTu = CUtilities.GetDateFromString(r.Cells("NgayChungTu").Value.ToString(), "ngày/tháng/năm")
                    End If
                    If (String.IsNullOrEmpty(r.Cells("NoiDung").FormattedValue.ToString()) = False) Then
                        .NoiDung = r.Cells("NoiDung").Value.ToString()
                    End If
                    If (String.IsNullOrEmpty(r.Cells("NguoiLienQuan").FormattedValue.ToString()) = False) Then
                        .NguoiLienQuan = r.Cells("NguoiLienQuan").Value.ToString()
                    End If
                    If (String.IsNullOrEmpty(r.Cells("DiaChi").FormattedValue.ToString()) = False) Then
                        .DiaChi = r.Cells("DiaChi").Value.ToString()
                    End If
                    .SoTien = CDbl(r.Cells("SoTien").Value.ToString())
                End With
                ctrlChungTu.InsertRecord(ct)
            End If
        Next
        EnableControls(False)
    End Sub
    Private Sub dataGridView_CellValidating(ByVal sender As Object, _
        ByVal e As DataGridViewCellValidatingEventArgs) _
        Handles gridBangKe.CellValidating

        ' Validate the CompanyName entry by disallowing empty strings.
        If gridBangKe.Columns(e.ColumnIndex).Name = "NgayChungTu" Then
            'kiểm tra ngày nhập vào có đúng định dạng ngày/tháng/năm
            If (CUtilities.CheckDate(e.FormattedValue.ToString(), "ngày/tháng/năm") = False) Then
                gridBangKe.Rows(e.RowIndex).ErrorText = "Ngày nhập vào không đúng. Nhấn ESC để thoát."
                e.Cancel = True
            End If
        End If
        'If gridBangKe.Columns(e.ColumnIndex).Name = "SoChungTu" Then
        '    'kiểm tra ngày nhập vào có đúng định dạng ngày/tháng/năm
        '    If (String.IsNullOrEmpty(e.FormattedValue.ToString())) Then
        '        gridBangKe.Rows(e.RowIndex).ErrorText = "Chưa nhập số chứng từ. Nhấn ESC để thoát."
        '        e.Cancel = True
        '    End If
        'End If
    End Sub

    Private Sub dataGridView_CellEndEdit(ByVal sender As Object, _
        ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) _
        Handles gridBangKe.CellEndEdit

        ' Clear the row error in case the user presses ESC.   
        gridBangKe.Rows(e.RowIndex).ErrorText = String.Empty
        If gridBangKe.Columns(e.ColumnIndex).Name = "SoTien" Then
            TinhTong()
        End If
    End Sub

    Private Sub frmBangKeChungTu_KeyUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyUp
        If ((e.KeyCode = Keys.N Or e.KeyCode = Keys.E) And e.Modifiers = Keys.ControlKey And btSua.Enabled) Then
            btSua_Click(Nothing, Nothing)
        End If
        If (e.KeyCode = Keys.Delete And btXoa.Enabled) Then
            btXoa_Click(Nothing, Nothing)
        End If
        If (e.KeyCode = Keys.S And e.Modifiers = Keys.ControlKey And btSave.Enabled) Then
            btSave_Click(Nothing, Nothing)
        End If
    End Sub

    Private Sub btPrint_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btPrint.Click
        If (curBangKe IsNot Nothing) Then
            Dim frm As New frmChungTuOption(curBangKe)
            frm.ShowDialog()
        Else
            If (btSave.Enabled) Then
                MessageBox.Show("Bạn lưu bảng kê chứng từ trước khi in!")
            Else
                MessageBox.Show("Chưa có bảng kê chứng từ!")
            End If
        End If
        
    End Sub
End Class